<!DOCTYPE html>
<html>
	<head>
		<meta charset="UTF-8" />
		<title>回忆类</title>
	</head>
	<body>
		<script type="text/javascript" >
			
			//定义一个Person类
			class Person {
				//构造器方法，用于：给实例自身初始化属性，且可以接到new调用时传入的参数
				constructor(name,age){
					//构造器中的this是谁？—————— 类的实例对象
					this.name = name
					this.age = age
				}
				//speak是一般方法，程序员根据业务逻辑，自己定义的一些方法
				//speak放在了哪里？ —— Person的原型对象上，一般都是供实例使用
				//speak中的this是谁？ —— 通过Person实例调用speak时，speak中的this就是Person实例
				speak(){
					console.log(`我是叫：${this.name},我今年${this.age}岁了`)
				}
			}

			//定义一个Student类继承与Person
			class Student extends Person {
				constructor(name,age,grade){
					super(name,age) //super能帮我调用父类的构造器,且super必须在this前调用
					this.grade = grade
				}
				study(){
					console.log(`我是念${this.grade}了，我在努力的学习`)
				}
				//重写从父类继承过来的方法
				speak(){
					console.log(`我是叫：${this.name},我今年${this.age}岁了，我念${this.grade}了`)
				}
			}

			const s1 = new Student('张三',18,'高三')
			console.log(s1)
			s1.study()
			s1.speak()


			/* 
				class Person{
					constructor(name,age){
						this.name = name
						this.age = age
						this.school = '尚硅谷'
						this.banji = '1125'
						this.subject = '前端'
					}
				}

				class Student extends Person{

				}
				const s1 = new Student('tom',18)
				console.log(s1)
			
			*/

			class Dog {
				constructor(name,age){
					this.name = name
					this.age = age
				}
				run(){
					console.log('正在飞奔')
				}
				a = 1
				static b = 2
			}

			const d = new Dog('wc',5)
			console.log(d)
			
		</script>
	</body>
</html>